package com.qf.config;

import org.springframework.amqp.core.*;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 *
 * 第一种办法：Java配置类  无敌  正常情况下
 *   1、自定义自动创建Queue
 *   2、自定义自动创建exchange
 *   3、自定义自动绑定（关键词）
 * 第二种办法：使用大量注解   也多 （写项目的使用了： 延迟队列、死信队列） 注解不能用
 *   *   1、自定义自动创建Queue
 *  *   2、自定义自动创建exchange
 *  *   3、自定义自动绑定（关键词）
 *
 * @author lixu
 */
@Configuration // spring-rabbit.xml
public class RabbitMQConfig {


    //Shift + Ctrl + u
    public static final String EXCHANGE_TOPIC = "exchange_2209";
    public static final String QUEUE_1 = "queue_2209_1";
    public static final String QUEUE_2 = "queue_2209_2";
    public static final String ROUTINGKEY1 = "*.orange.*";
    public static final String ROUTINGKEY2 = "*.*.rabbit";
    public static final String ROUTINGKEY3 = "lazy.#";


    /**
     * 创建队列 1
     * <bean id  class
     */
    @Bean
    public Queue queue1(){
        return new Queue(QUEUE_1);
    }
    /**
     * 创建队列 2
     * <bean id  class
     */
    @Bean
    public Queue queue2(){
        //工具类创建也行
        return QueueBuilder.durable(QUEUE_2).build();
    }
    /**
     * 创建交换机
     */
    @Bean
    public Exchange exchangeTopic(){
        //工具类创建也行
        return ExchangeBuilder.topicExchange(EXCHANGE_TOPIC).build();
    }

    //绑定1   exchangeTopic 创建队列 1
    @Bean
    public Binding bindingExchangeTopicToQueue1(){
        return BindingBuilder.bind(queue1()).to(exchangeTopic()).with(ROUTINGKEY1).noargs();//
    }
    //绑定2   exchangeTopic 创建队列 2
    @Bean
    public Binding bindingExchangeTopicToQueue21(){
        return BindingBuilder.bind(queue2()).to(exchangeTopic()).with(ROUTINGKEY2).noargs();//
    }
    //绑定2   exchangeTopic 创建队列 2
    @Bean
    public Binding bindingExchangeTopicToQueue22(){
        return BindingBuilder.bind(queue2()).to(exchangeTopic()).with(ROUTINGKEY3).noargs();//
    }


}
